home *** CD-ROM | disk | FTP | other *** search
/ Clickx 63 / Clickx 63.iso / software / multimedia / mirov204 / Miro_Installer.exe / xulrunner / chrome / toolkit.jar / content / global / printdialog.js < prev    next >
Encoding:
JavaScript  |  2007-11-13  |  14.7 KB  |  425 lines

  1. //@line 42 "/e/xr19rel/WINNT_5.2_Depend/mozilla/toolkit/components/printing/content/printdialog.js"
  2.  
  3. var dialog;
  4. var printService       = null;
  5. var gOriginalNumCopies = 1;
  6.  
  7. var paramBlock;
  8. var gPrefs             = null;
  9. var gPrintSettings     = null;
  10. var gWebBrowserPrint   = null;
  11. var gPrintSetInterface = Components.interfaces.nsIPrintSettings;
  12. var doDebug            = false;
  13.  
  14. //---------------------------------------------------
  15. function initDialog()
  16. {
  17.   dialog = new Object;
  18.  
  19.   dialog.propertiesButton = document.getElementById("properties");
  20.   dialog.descText         = document.getElementById("descText");
  21.  
  22.   dialog.printrangeGroup = document.getElementById("printrangeGroup");
  23.   dialog.allpagesRadio   = document.getElementById("allpagesRadio");
  24.   dialog.rangeRadio      = document.getElementById("rangeRadio");
  25.   dialog.selectionRadio  = document.getElementById("selectionRadio");
  26.   dialog.frompageInput   = document.getElementById("frompageInput");
  27.   dialog.frompageLabel   = document.getElementById("frompageLabel");
  28.   dialog.topageInput     = document.getElementById("topageInput");
  29.   dialog.topageLabel     = document.getElementById("topageLabel");
  30.  
  31.   dialog.numCopiesInput  = document.getElementById("numCopiesInput");  
  32.  
  33.   dialog.printframeGroup      = document.getElementById("printframeGroup");
  34.   dialog.aslaidoutRadio       = document.getElementById("aslaidoutRadio");
  35.   dialog.selectedframeRadio   = document.getElementById("selectedframeRadio");
  36.   dialog.eachframesepRadio    = document.getElementById("eachframesepRadio");
  37.   dialog.printframeGroupLabel = document.getElementById("printframeGroupLabel");
  38.  
  39.   dialog.fileCheck       = document.getElementById("fileCheck");
  40.   dialog.printerLabel    = document.getElementById("printerLabel");
  41.   dialog.printerList     = document.getElementById("printerList");
  42.  
  43.   dialog.printButton     = document.documentElement.getButton("accept");
  44.  
  45.   // <data> elements
  46.   dialog.printName       = document.getElementById("printButton");
  47.   dialog.fpDialog        = document.getElementById("fpDialog");
  48.  
  49.   dialog.enabled         = false;
  50. }
  51.  
  52. //---------------------------------------------------
  53. function checkInteger(element)
  54. {
  55.   var value = element.value;
  56.   if (value && value.length > 0) {
  57.     value = value.replace(/[^0-9]/g,"");
  58.     if (!value) value = "";
  59.     element.value = value;
  60.   }
  61.   if (!value || value < 1 || value > 999)
  62.     dialog.printButton.setAttribute("disabled","true");
  63.   else
  64.     dialog.printButton.removeAttribute("disabled");
  65. }
  66.  
  67. //---------------------------------------------------
  68. function stripTrailingWhitespace(element)
  69. {
  70.   var value = element.value;
  71.   value = value.replace(/\s+$/,"");
  72.   element.value = value;
  73. }
  74.  
  75. //---------------------------------------------------
  76. function getPrinterDescription(printerName)
  77. {
  78.   var s = "";
  79.  
  80.   try {
  81.     /* This may not work with non-ASCII test (see bug 235763 comment #16) */
  82.     s = gPrefs.getCharPref("print.printer_" + printerName + ".printer_description")
  83.   } catch(e) {
  84.   }
  85.     
  86.   return s;
  87. }
  88.  
  89. //---------------------------------------------------
  90. function listElement(aListElement)
  91.   {
  92.     this.listElement = aListElement;
  93.   }
  94.  
  95. listElement.prototype =
  96.   {
  97.     clearList:
  98.       function ()
  99.         {
  100.           // remove the menupopup node child of the menulist.
  101.           var popup = this.listElement.firstChild;
  102.           if (popup) {
  103.             this.listElement.removeChild(popup);
  104.           }
  105.         },
  106.  
  107.     appendPrinterNames: 
  108.       function (aDataObject) 
  109.         { 
  110.           if ((null == aDataObject) || !aDataObject.hasMore()) {
  111.             // disable dialog
  112.             var stringBundle = srGetStrBundle("chrome://global/locale/printing.properties");
  113.             this.listElement.setAttribute("value", "");
  114.             this.listElement.setAttribute("label", stringBundle.GetStringFromName("noprinter"));
  115.  
  116.             this.listElement.setAttribute("disabled", "true");
  117.             dialog.printerLabel.setAttribute("disabled","true");
  118.             dialog.propertiesButton.setAttribute("disabled","true");
  119.             dialog.fileCheck.setAttribute("disabled","true");
  120.             dialog.printButton.setAttribute("disabled","true");
  121.           }
  122.           else {
  123.             // build popup menu from printer names
  124.             var list = document.getElementById("printerList"); 
  125.             do {
  126.               printerNameStr = aDataObject.getNext();
  127.               list.appendItem(printerNameStr, printerNameStr, getPrinterDescription(printerNameStr));
  128.             } while (aDataObject.hasMore());
  129.             this.listElement.removeAttribute("disabled");
  130.           }
  131.         } 
  132.   };
  133.  
  134. //---------------------------------------------------
  135. function getPrinters()
  136. {
  137.   var selectElement = new listElement(dialog.printerList);
  138.   selectElement.clearList();
  139.  
  140.   var printerEnumerator;
  141.   try {
  142.     printerEnumerator =
  143.         Components.classes["@mozilla.org/gfx/printerenumerator;1"]
  144.                   .getService(Components.interfaces.nsIPrinterEnumerator)
  145.                   .printerNameList;
  146.   } catch(e) { printerEnumerator = null; }
  147.  
  148.   selectElement.appendPrinterNames(printerEnumerator);
  149.   selectElement.listElement.value = printService.defaultPrinterName;
  150.  
  151.   // make sure we load the prefs for the initially selected printer
  152.   setPrinterDefaultsForSelectedPrinter();
  153. }
  154.  
  155.  
  156. //---------------------------------------------------
  157. // update gPrintSettings with the defaults for the selected printer
  158. function setPrinterDefaultsForSelectedPrinter()
  159. {
  160.   gPrintSettings.printerName = dialog.printerList.value;
  161.   
  162.   dialog.descText.value = getPrinterDescription(gPrintSettings.printerName);
  163.   
  164.   // First get any defaults from the printer 
  165.   printService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);
  166.   
  167.   // now augment them with any values from last time
  168.   printService.initPrintSettingsFromPrefs(gPrintSettings, true, gPrintSetInterface.kInitSaveAll);
  169.   
  170.   if (doDebug) {
  171.     dump("setPrinterDefaultsForSelectedPrinter: printerName='"+gPrintSettings.printerName+"', paperName='"+gPrintSettings.paperName+"'\n");
  172.   }
  173. }
  174.  
  175. //---------------------------------------------------
  176. function displayPropertiesDialog()
  177. {
  178.   gPrintSettings.numCopies = dialog.numCopiesInput.value;
  179.   try {
  180.     var printingPromptService = Components.classes["@mozilla.org/embedcomp/printingprompt-service;1"]
  181.                                                  .getService(Components.interfaces.nsIPrintingPromptService);
  182.     if (printingPromptService) {
  183.       printingPromptService.showPrinterProperties(null, dialog.printerList.value, gPrintSettings);
  184.       dialog.numCopiesInput.value = gPrintSettings.numCopies;
  185.     }
  186.   } catch(e) {
  187.     dump("problems getting printingPromptService\n");
  188.   }
  189. }
  190.  
  191. //---------------------------------------------------
  192. function doPrintRange(inx)
  193. {
  194.   if (inx == 1) {
  195.     dialog.frompageInput.removeAttribute("disabled");
  196.     dialog.frompageLabel.removeAttribute("disabled");
  197.     dialog.topageInput.removeAttribute("disabled");
  198.     dialog.topageLabel.removeAttribute("disabled");
  199.   } else {
  200.     dialog.frompageInput.setAttribute("disabled","true");
  201.     dialog.frompageLabel.setAttribute("disabled","true");
  202.     dialog.topageInput.setAttribute("disabled","true");
  203.     dialog.topageLabel.setAttribute("disabled","true");
  204.   }
  205. }
  206.  
  207. //---------------------------------------------------
  208. function loadDialog()
  209. {
  210.   var print_copies        = 1;
  211.   var print_selection_radio_enabled = false;
  212.   var print_frametype     = gPrintSetInterface.kSelectedFrame;
  213.   var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
  214.   var print_tofile        = "";
  215.  
  216.   try {
  217.     gPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  218.  
  219.     printService = Components.classes["@mozilla.org/gfx/printsettings-service;1"];
  220.     if (printService) {
  221.       printService = printService.getService();
  222.       if (printService) {
  223.         printService = printService.QueryInterface(Components.interfaces.nsIPrintSettingsService);
  224.       }
  225.     }
  226.   } catch(e) {}
  227.  
  228.   // Note: getPrinters sets up the PrintToFile control
  229.   getPrinters();
  230.  
  231.   if (gPrintSettings) {
  232.     print_tofile        = gPrintSettings.printToFile;
  233.     gOriginalNumCopies  = gPrintSettings.numCopies;
  234.  
  235.     print_copies        = gPrintSettings.numCopies;
  236.     print_frametype     = gPrintSettings.printFrameType;
  237.     print_howToEnableUI = gPrintSettings.howToEnableFrameUI;
  238.     print_selection_radio_enabled = gPrintSettings.GetPrintOptions(gPrintSetInterface.kEnableSelectionRB);
  239.   }
  240.  
  241.   if (doDebug) {
  242.     dump("loadDialog*********************************************\n");
  243.     dump("print_tofile            "+print_tofile+"\n");
  244.     dump("print_frame             "+print_frametype+"\n");
  245.     dump("print_howToEnableUI     "+print_howToEnableUI+"\n");
  246.     dump("selection_radio_enabled "+print_selection_radio_enabled+"\n");
  247.   }
  248.  
  249.   dialog.printrangeGroup.selectedItem = dialog.allpagesRadio;
  250.   if (print_selection_radio_enabled) {
  251.     dialog.selectionRadio.removeAttribute("disabled");
  252.   } else {
  253.     dialog.selectionRadio.setAttribute("disabled","true");
  254.   }
  255.   doPrintRange(dialog.rangeRadio.selected);
  256.   dialog.frompageInput.value  = 1;
  257.   dialog.topageInput.value    = 1;
  258.   dialog.numCopiesInput.value = print_copies;
  259.  
  260.   if (doDebug) {
  261.     dump("print_howToEnableUI: "+print_howToEnableUI+"\n");
  262.   }
  263.  
  264.   // print frame
  265.   if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAll) {
  266.     dialog.aslaidoutRadio.removeAttribute("disabled");
  267.  
  268.     dialog.selectedframeRadio.removeAttribute("disabled");
  269.     dialog.eachframesepRadio.removeAttribute("disabled");
  270.     dialog.printframeGroupLabel.removeAttribute("disabled");
  271.  
  272.     // initialize radio group
  273.     dialog.printframeGroup.selectedItem = dialog.selectedframeRadio;
  274.  
  275.   } else if (print_howToEnableUI == gPrintSetInterface.kFrameEnableAsIsAndEach) {
  276.     dialog.aslaidoutRadio.removeAttribute("disabled");       //enable
  277.  
  278.     dialog.selectedframeRadio.setAttribute("disabled","true"); // disable
  279.     dialog.eachframesepRadio.removeAttribute("disabled");       // enable
  280.     dialog.printframeGroupLabel.removeAttribute("disabled");    // enable
  281.  
  282.     // initialize
  283.     dialog.printframeGroup.selectedItem = dialog.eachframesepRadio;
  284.  
  285.   } else {
  286.     dialog.aslaidoutRadio.setAttribute("disabled","true");
  287.     dialog.selectedframeRadio.setAttribute("disabled","true");
  288.     dialog.eachframesepRadio.setAttribute("disabled","true");
  289.     dialog.printframeGroupLabel.setAttribute("disabled","true");
  290.   }
  291.  
  292.   dialog.printButton.label = dialog.printName.getAttribute("label");
  293. }
  294.  
  295. //---------------------------------------------------
  296. function onLoad()
  297. {
  298.   // Init dialog.
  299.   initDialog();
  300.  
  301.   // param[0]: nsIPrintSettings object
  302.   // param[1]: container for return value (1 = print, 0 = cancel)
  303.  
  304.   gPrintSettings   = window.arguments[0].QueryInterface(gPrintSetInterface);
  305.   gWebBrowserPrint = window.arguments[1].QueryInterface(Components.interfaces.nsIWebBrowserPrint);
  306.   paramBlock       = window.arguments[2].QueryInterface(Components.interfaces.nsIDialogParamBlock);
  307.  
  308.   // default return value is "cancel"
  309.   paramBlock.SetInt(0, 0);
  310.  
  311.   loadDialog();
  312. }
  313.  
  314. //---------------------------------------------------
  315. function onAccept()
  316. {
  317.   if (gPrintSettings != null) {
  318.     var print_howToEnableUI = gPrintSetInterface.kFrameEnableNone;
  319.  
  320.     // save these out so they can be picked up by the device spec
  321.     gPrintSettings.printerName = dialog.printerList.value;
  322.     print_howToEnableUI        = gPrintSettings.howToEnableFrameUI;
  323.     gPrintSettings.printToFile = dialog.fileCheck.checked;
  324.  
  325.     if (gPrintSettings.printToFile && !chooseFile())
  326.       return false;
  327.  
  328.     if (dialog.allpagesRadio.selected) {
  329.       gPrintSettings.printRange = gPrintSetInterface.kRangeAllPages;
  330.     } else if (dialog.rangeRadio.selected) {
  331.       gPrintSettings.printRange = gPrintSetInterface.kRangeSpecifiedPageRange;
  332.     } else if (dialog.selectionRadio.selected) {
  333.       gPrintSettings.printRange = gPrintSetInterface.kRangeSelection;
  334.     }
  335.     gPrintSettings.startPageRange = dialog.frompageInput.value;
  336.     gPrintSettings.endPageRange   = dialog.topageInput.value;
  337.     gPrintSettings.numCopies      = dialog.numCopiesInput.value;
  338.  
  339.     var frametype = gPrintSetInterface.kNoFrames;
  340.     if (print_howToEnableUI != gPrintSetInterface.kFrameEnableNone) {
  341.       if (dialog.aslaidoutRadio.selected) {
  342.         frametype = gPrintSetInterface.kFramesAsIs;
  343.       } else if (dialog.selectedframeRadio.selected) {
  344.         frametype = gPrintSetInterface.kSelectedFrame;
  345.       } else if (dialog.eachframesepRadio.selected) {
  346.         frametype = gPrintSetInterface.kEachFrameSep;
  347.       } else {
  348.         frametype = gPrintSetInterface.kSelectedFrame;
  349.       }
  350.     }
  351.     gPrintSettings.printFrameType = frametype;
  352.     if (doDebug) {
  353.       dump("onAccept*********************************************\n");
  354.       dump("frametype      "+frametype+"\n");
  355.       dump("numCopies      "+gPrintSettings.numCopies+"\n");
  356.       dump("printRange     "+gPrintSettings.printRange+"\n");
  357.       dump("printerName    "+gPrintSettings.printerName+"\n");
  358.       dump("startPageRange "+gPrintSettings.startPageRange+"\n");
  359.       dump("endPageRange   "+gPrintSettings.endPageRange+"\n");
  360.       dump("printToFile    "+gPrintSettings.printToFile+"\n");
  361.     }
  362.   }
  363.  
  364.   var saveToPrefs = false;
  365.  
  366.   saveToPrefs = gPrefs.getBoolPref("print.save_print_settings");
  367.  
  368.   if (saveToPrefs && printService != null) {
  369.     var flags = gPrintSetInterface.kInitSavePaperSize      | 
  370.                 gPrintSetInterface.kInitSaveColorSpace     |
  371.                 gPrintSetInterface.kInitSaveEdges          |
  372.                 gPrintSetInterface.kInitSaveInColor        |
  373.                 gPrintSetInterface.kInitSaveResolutionName |
  374.                 gPrintSetInterface.kInitSaveDownloadFonts  |
  375.                 gPrintSetInterface.kInitSavePrintCommand   |
  376.                 gPrintSetInterface.kInitSaveShrinkToFit    |
  377.                 gPrintSetInterface.kInitSaveScaling;
  378.     printService.savePrintSettingsToPrefs(gPrintSettings, true, flags);
  379.   }
  380.  
  381.   // set return value to "print"
  382.   if (paramBlock) {
  383.     paramBlock.SetInt(0, 1);
  384.   } else {
  385.     dump("*** FATAL ERROR: No paramBlock\n");
  386.   }
  387.  
  388.   return true;
  389. }
  390.  
  391. //---------------------------------------------------
  392. function onCancel()
  393. {
  394.   // set return value to "cancel"
  395.   if (paramBlock) {
  396.     paramBlock.SetInt(0, 0);
  397.   } else {
  398.     dump("*** FATAL ERROR: No paramBlock\n");
  399.   }
  400.  
  401.   return true;
  402. }
  403.  
  404. //---------------------------------------------------
  405. const nsIFilePicker = Components.interfaces.nsIFilePicker;
  406. function chooseFile()
  407. {
  408.   try {
  409.     var fp = Components.classes["@mozilla.org/filepicker;1"]
  410.                        .createInstance(nsIFilePicker);
  411.     fp.init(window, dialog.fpDialog.getAttribute("label"), nsIFilePicker.modeSave);
  412.     fp.appendFilters(nsIFilePicker.filterAll);
  413.     if (fp.show() != Components.interfaces.nsIFilePicker.returnCancel &&
  414.         fp.file && fp.file.path) {
  415.       gPrintSettings.toFileName = fp.file.path;
  416.       return true;
  417.     }
  418.   } catch(ex) {
  419.     dump(ex);
  420.   }
  421.  
  422.   return false;
  423. }
  424.  
  425.